Проба SV.
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ПроSV+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: 
 *   решение систем линейных уравнений (A*x=b) методом SV-разложения
 *
 * ПРИМЕЧАНИЯ: 
 *     Система уравнений записана в файле "ПроМатр2.дан".
 *     В этом файле 1-я строка содержит размер матрицы A
 *   (число строк и столбцов), в следующих строках записанны значения элементов
 *   матрицы A, потом на отдельной строке размер матрицы свободных членов B
 *   (число векторов b и их размер), а далее значения элементов матрицы B, 
 *   в которой строки являются векторами b.
 *
 *     Прямоугольная матрица A (N на M, с N >= M) раскладывается на три
 *   сомножителя (A=U*S*V'), где U (N на M) состоит из столбцов - собственных
 *   векторов, S (M на M) - диагональная матрица с элементами >= 0 (собственные
 *   значения) и V (M на M) ортогональная матрица. Близкие к 0 (отклонение
 *   задается пользователем) собственные значения обнуляются. Решение 
 *   ищется в виде x = V*Diag(1/S(i))*U'*b, для S(i) # 0.
 *     Редактируя таким способом собственные значения S, можно успешно
 *   применять этод метод для решения систем уравнений с вырожденными
 *   и псевдо-вырожденными матрицами.
 *     Если матрица A вырождена, то возможно два случая:
 *   1) Если система недоопределена, то метод возвращает вектор x с минимальной
 *      нормой. 
 *   2) Если система несовместна, то метод возвращает такой вектор x, для
 *      которого A*x является наилучшим приближением к b (по норме). 
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Вект   ИЗ "...\Отделы\Числа\",
  Матр   ИЗ "...\Отделы\Числа\",
  МатрВВ ИЗ "...\Отделы\Числа\",
  Читать ИЗ "...\Отделы\Обмен\",
  Вывод  ИЗ "...\Отделы\Обмен\";

(******************************************************************************)
ЗАДАЧА Голова;
ПОСТ
  ДОПУСК=1.D-8;    (* собственные значения обнуляются, если они более чем
                      * в ДОПУСК раз меньше наибольшего собственного значения *)
ПЕР
  n:ЦЕЛ;  (* размер вектора свободных членов *)
  nv:ЦЕЛ; (* число векторов свободных членов *)
  A:Матр.Доступ; (* матрица системы *)
  s:Вект.Доступ; (* собственные значения *)
  v:Матр.Доступ; (* ортогональная матрица *)
  B:Матр.Доступ; (* вектора свободных членов *)
  X:Матр.Доступ; (* вектора решения *)
  i:ЦЕЛ; 
  п:Читать.Поток;
УКАЗ
  п:=МатрВВ.ОткрытьПоток("ПроМатр2.дан");
  A:=МатрВВ.ЧитатьМатр(п);
  B:=МатрВВ.ЧитатьМатр(п);
  Читать.Закрыть(п);
  nv:=РАЗМЕР(B^,0);
  n:=РАЗМЕР(B^,1);
  СОЗДАТЬ(s,n);
  СОЗДАТЬ(v,n,n);
  СОЗДАТЬ(X,nv,n);
  Вывод.Цепь("^Исходная матрица:^");
  МатрВВ.ВыводМатр("%10.5f",A^);
  Вывод.Цепь("^Вектора свободных членов:^");
  ОТ i:=0 ДО nv-1 ВЫП
    МатрВВ.ВыводВект("%10.5f",B[i])
  КОН;
  (* После выполнения РазложитьНаSV матрица U оказывается на месте матрицы A *)
  ЕСЛИ Матр.РазложитьНаSV(A^,s^,v^) = 0 ТО
    (* обнуляем незначимые сингулярные значения *)
    Матр.ОбнулитьS(s^,ДОПУСК);
    (* решаем систему для каждого вектора свободных членов b *)
    Вывод.Цепь("^Вектора решения:^");
    ОТ i:=0 ДО nv-1 ВЫП
      Матр.РешитьИзSV(A^,s^,v^,B[i],X[i]); 
      МатрВВ.ВыводВект("%10.5f",X[i])
    КОН
  ИНАЧЕ
    Вывод.Цепь("^Нет схождения!^")
  КОН
КОН Голова;

(******************************************************************************)
УКАЗ
  Голова
КОН ПроSV.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы